// 函数
// 当函数名大写，构造函数
// js   函数就可以构建一个类
// js 早期没有class 关键字，但并不影响他作java的传统面向对象编程
// 函数是一等对象，用来构造对象
// js 其实并没有类
function Cat(name){
    // 给一组对象添加属性
    this.name = name;
    // 内存开销 复杂的多 入栈，分配堆内存
    // this.makeSound = function(){
    //     console.log('喵喵');
    // }
}
// 是一个构造对象的函数
// 函数也是对象
// js 函数对象有 prototype 属性
// 共有的方法放到prototype中,省内存
Cat.prototype.makeSound = function(){
    console.log('喵喵')
}
Cat.prototype.eat = function(){
    console.log('吃鱼')
}
Cat.sayHi = function(){
    console.log('hello')
}
// 同一组对象 共同的类方法，属性模板
var xm = new Cat('小黑');
xm.makeSound();
console.log('xm.name');
console.log(Cat.prototype);

var xh = new Cat('小花');
xm.sayHi; // 不能调用
// 判断两个对象是两兄弟
console.log(xm == xh);
// 判断对象是某类的实例
// typeof []object 判断实例
// instanceof-判断xm是否是xh的实例
console.log(xm.constructor ==xh.constructor)
// 
let a = {}; //对象字面量的构造函数 object()
console.log(xm instanceof xh);
let obj = new Object();// 对象字面量
console.log(obj instanceof Object);